在上一篇文章中提到了遊戲延遲的問題,假設你今天在玩一款槍戰遊戲,你按下了左鍵進行開槍的動作,而本地端的電腦傳送了開槍的封包到伺服器告訴伺服器您要進行開槍這個指令,而你在等待的這個過程中,你可能覺得電腦總是慢個幾十或幾百毫秒,嚴重點可能根本無法正常去遊玩遊戲,而為了解決這個問題則衍生出了一個方法-客戶端預測。
客戶端預測是指在客戶端在發送封包時,並不需要等待伺服器回應的封包,即可先在本地端電腦進行運算,並在收到伺服器的封包後去進行比對及調整。
雖然今天客戶端預測可以讓本地端電腦先進行資料的運算,但伺服器是具有權威性的,如果伺服器運算後的資料與客戶端的資料有所不同的話,會以伺服器的運算資料為主。
下圖為客戶端預測運作時的概念圖:
0ms - 假設今天玩家在本地端電腦按了W鍵,玩家電腦傳送一個封包告訴伺服器我點擊了W鍵,而本地端電腦也同時做計算使玩家往座標(0,0,1)前進。
50ms - 伺服器收到了玩家的封包,並運算出玩家須往座標(0,0,1)的位置移動,並將結果回傳給玩家。
100ms - 玩家收到了伺服器傳來的封包,比對完客戶端與伺服器端的結果相同,無需做修正。(若結果不同則須修正為伺服器運算的結果)